#include "libPPD.h"
#include "N-Step-SCAN.h"

/* Variables Globales */
t_log *loguear;
t_config config;
char *archivoMapeado;
int32_t fileDescriptor;
tCabezal cabezal;
tCabezal cabezalAux;
pthread_mutex_t bloqueaLista;
pthread_mutex_t bloqueaNLista;
sem_t semaforoLista;
int32_t *vectorSockets;
int32_t sockConsola;
int32_t socketPRAID=0;
t_listaPRAID *listaPedidosPRAID;
t_listaPFS *listaPedidosPFS;
tNListaPRAID *listaPRAID;
int32_t primerNodoLista;
tNListaPFS *listaPFS;
sem_t sublistaLlena;
sem_t listaPedidosVacia;
int32_t contadorEscriturasSectores;
int32_t cantidadMSync;

int32_t main()
{

	/*Inicializo log, config, disco, cabezal, cache, mutex y semaforo de la Lista*/
	inicializarVariables();

	/* Proceso Consola */
	procesoConsola();

	signal(SIGCHLD, cerrarConsola);

	/* Conexion con PRAID o PFS*/
	if (strcmp(config.modoInicio, "CONNECT") == 0)
	{
		listaPedidosPRAID = crearListaPRAID();
		pthread_t idThread;
		pthread_create(&idThread,NULL,(void*)responderPedidosRAID,NULL);
		struct pollfd *descriptoresLectura;
		descriptoresLectura = (struct pollfd *)calloc(2,sizeof(struct pollfd)); //Consola y RAID
		recibirPedidosPRAID(descriptoresLectura);
	}

	else if (strcmp(config.modoInicio, "LISTEN") == 0)
	{
		listaPedidosPFS = crearListaPFS();
		pthread_t idThread;
		pthread_create(&idThread,NULL,(void*)responderPedidosPFS,NULL);
		recibirPedidosPFS();
	}

	return 0;

}
